#ifndef __SENDPAGE_H
#define __SENDPAGE_H

#include "oled.h"

// 键盘布局：4 行 × 11 个键
#define SP_KEY_ROWS    4
#define SP_KEY_COLS    11


// 每个键对应的字符宽高（和你原来用的 8x16 一致）
#define SP_KEY_CHAR_W  8
#define SP_KEY_CHAR_H  16
#define SP_KEY_CHAR_SIZE 16
#define SP_DELTA       4

// 键盘显示区域：OLED 底部两行（第 3、4 行），也就是 y=32~63
#define SP_KEYBOARD_AREA_Y  32   // 即 2 * 16
#define SP_STR_LEN     64

struct SP_state{
	u8 kb_top_row;
	u8 cur_row; 
	u8 cur_col;
	char str[SP_STR_LEN];
	u16 start_index;
};

void SP_InitSPState(struct SP_state * send_page);

// 初始化键盘（目前只是占位，方便以后扩展）
void SP_InitKeyboard(void);

// 绘制键盘：
//  - kb_top_row：滑动窗口顶部行号 0~2（显示 kb_top_row 和 kb_top_row+1 两行）
//  - cur_row   ：当前选中键的“全局行号” 0~3
//  - cur_col   ：当前选中键的列号 0~10
void SP_DrawKeyboard(struct SP_state* send_page);

// 根据行号+列号，返回对应的键字符（例如 'A'、'3'、';' 等）
//  - 如果越界，返回 0
char SP_GetKeyChar(struct SP_state* send_page);

// 在第一行显示当前输入的字符串：
//  - str         ：要显示的完整字符串
//  - start_index ：从 str 的第几个字符开始显示（0 表示从开头开始）
// 行为：
//  - 清空第 1 行（y=0~15）
//  - 从 str[start_index] 开始，最多显示 16 个字符，多余的直接丢弃
//  - 如果 start_index >= strlen(str)，则只清空该行，不显示任何字符
void SP_ShowInputLine(struct SP_state* send_page);

void SP_ShowAll(struct SP_state* send_page);

#endif